package com.itany.corejava.code06_数组;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author 石小俊
 * @date 2023年04月17日 9:06
 */
public class Test13_螺旋式数组 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入每一行的元素数量:");
        int num = sc.nextInt();
        int[][] arr = new int[num][num];
        // arr[y][x]
        // 定义x轴最小值
        int minX = 0;
        // 定义x轴最大值
        int maxX = num - 1;
        // 定义y轴最小值
        int minY = 0;
        // 定义y轴最大值
        int maxY = num - 1;
        // 定义每一个数组元素的值
        int count = 1;
        // 条件
        while (minX <= maxX) {
            // 从左往右遍历,arr[minY][minX]-arr[minY][maxX]
            for (int x = minX; x <= maxX; x++) {
                arr[minY][x] = count++;
            }
            // 此时最上方的元素全部有值了,minY的值+1
            minY++;

            // 从上往下遍历,arr[minY][maxX]-arr[maxY][maxX]
            for (int y = minY; y <= maxY; y++) {
                arr[y][maxX] = count++;
            }
            // 此时最右边的元素全部有值了,maxX-1
            maxX--;

            // 从右往左遍历,arr[maxY][maxX]-arr[maxY][minX]
            for (int x = maxX; x >= minX; x--) {
                arr[maxY][x] = count++;
            }
            // 此时最下方元素全部有值了,maxY-1
            maxY--;

            // 从下往上遍历,arr[maxY][minX]-arr[minY][minX]
            for (int y = maxY; y >= minY; y--) {
                arr[y][minX] = count++;
            }
            // 此时最左边元素全部有值了,minX+1
            minX++;
        }


        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j] + "\t");
            }
            System.out.println();
        }

    }
}
